// 导入joi校验包
const Joi = require("joi");
// 导入sql
const { findUser, registerUser, editInformation } = require("../model/userModel")
// 导入加密方法
const { cryptoPassword } = require("../utils/encryptions")
// 导入获取token方法
const { getToken } = require("../utils/gainToken")

module.exports = {
  // 注册
  register: async (ctx) => {
    // 结构注册对象
    let { user_name, user_password, user_mobile, user_gender } = ctx.request.body;
    // 参数校验 是否合法   不合法返回提示信息  并return 退出
    const schema = Joi.object({
      user_name: Joi.string().min(1).max(20).required(),
      user_password: Joi.string().pattern(/^[a-zA-Z0-9]{6,20}$/),
      repeat_password: Joi.ref('password'),
      user_mobile: Joi.string().pattern(/^1(3\d|4[5-9]|5[0-35-9]|6[2567]|7[0-8]|8\d|9[0-35-9])\d{8}$/)
    });
    const verify = schema.validate({ user_name, user_password, user_mobile });
    // 如果校验不通过 return
    if (verify.error) {
      ctx.body = {
        status: 205,
        message: verify.error.details[0].message
      }
      return;
    }
    // 通过手机号获取用户
    let user = await findUser(user_mobile);
    // 如果查询到用户表示已经注册
    if (user[0]) {
      ctx.body = {
        status: 205,
        msg: "您已注册"
      }
      return;
    }
    // 调用注册sql方法
    registerUser(user_name, cryptoPassword(user_password), user_mobile, user_gender)

    ctx.body = {
      status: 200,
      msg: "注册成功"
    }
  },
  // 密码登录
  passwordLogin: async (ctx) => {
    // 结构登录对象
    const { user_mobile, user_password } = ctx.request.body;
    // 查询登录用户是否存在
    let res = await findUser(user_mobile);
    // 如果存在 判断密码是否正确
    if (res[0]) {
      if (cryptoPassword(user_password) !== res[0].user_password) {
        ctx.body = {
          status: 205,
          msg: "您的密码错误"
        }
        return;
      }
    } else {
      ctx.body = {
        status: 205,
        msg: "手机号不存在"
      }
      return;
    }

    // 登录成功
    ctx.body = {
      status: 200,
      msg: "登录成功",
      data: res[0],
      token: getToken({ user_mobile })
    }
  },
  //手机号登录
  mobileLogin: async (ctx) => {
    const { user_mobile, code } = ctx.request.body;
    // 查询登录用户是否存在
    let res = await findUser(user_mobile);
    // 如果存在
    if (res[0]) {
      if (code !== "123456") {
        ctx.body = {
          status: 205,
          msg: "验证码错误"
        }
        return;
      }
    } else {
      ctx.body = {
        status: 205,
        msg: "手机号不存在"
      }
      return;
    }

    // 登录成功
    ctx.body = {
      status: 200,
      msg: "登录成功",
      data: res[0],
      token: getToken({ user_mobile })
    }
  },
  // 获取用户信息
  getUserMessage: async (ctx) => {
    const { user_id } = ctx.request.query;
    // 通过手机号获取用户
    let user = await findUser(user_id);
    // 如果查询到用户表示已经注册
    if (user[0]) {
      ctx.body = {
        status: 200,
        msg: "查询成功",
        data: user[0]
      }
      return;
    } else {
      ctx.body = {
        status: 205,
        msg: "查询失败"
      }
    }
  },
  // 修改用户资料
  editInformation: async (ctx) => {
    const { user_id, user_name, user_gender, user_age, user_address, user_intro, user_avatar } = ctx.request.body;
    let res = await editInformation(user_id, user_name, user_gender, user_age, user_address, user_intro, user_avatar);

    if (res.affectedRows === 1) {
      ctx.body = {
        status: 200,
        msg: "编辑成功"
      }
    } else {
      ctx.body = {
        status: 205,
        msg: "编辑失败"
      }
    }
  }
}